package com.feib.soeasy.action;

import java.util.ArrayList;

import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.DontBind;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.integration.spring.SpringBean;
import net.sourceforge.stripes.validation.LocalizableError;
import net.sourceforge.stripes.validation.ValidationErrorHandler;
import net.sourceforge.stripes.validation.ValidationErrors;

import com.feib.soeasy.model.Payer;
import com.feib.soeasy.model.PayerTemp;
import com.feib.soeasy.pagination.PaginatedList;
import com.feib.soeasy.service.PayerTempService;

/**
 * @title (#)Soez2001ActionBean.java<br>
 * @description 繳款人資料單筆放行<br>
 * @author Anson Tsai<br>
 * @version 1.0.0 2010/11/25
 * @copyright Far Eastern International Bank Copyright (c) 2010<br>
 * @2011/2/12 create by Anson Tsai<br>
 */
public class Soez2001ActionBean extends BaseActionBean implements ValidationErrorHandler {

    /**
     * 繳款人資料單筆放行畫面
     */
    private static final String DEFAULT_JSP = "/WEB-INF/views/soez2001/soez2001.jsp";

    /**
     * 繳款人資料單筆明細畫面
     */
    private static final String AJAX_QUERY_PAYER_JSP = "/WEB-INF/views/soez2001/payerTempList.jsp";
    
    /**
     * 放行結果畫面
     */
    private static final String AFTER_CONFIRM_JSP = "/WEB-INF/views/soez2001/afterConfirm.jsp";

    /**
     * 
     */
    private Long payerTempPk;

    /**
     * 查詢結果
     */
    private PaginatedList<PayerTemp> queryResult;

    /**
     * Payer Result
     */
    private Payer resultPayer;

    /**
     * PayerTemp Result
     */
    private PayerTemp resultPayerTemp;
    

    private ArrayList<PayerTemp> checkPayerTemp ;

    /**
     * 放行處理結果
     */
    private String confirmMessage;

    @SpringBean("payerTempService")
    private PayerTempService payerTempService;

    @DontBind
    @DefaultHandler
    public Resolution doDefault() { 
        logger.debug("Enter doDefault mehtod.");

        
        if (null == queryResult)
            queryResult = new PaginatedList<PayerTemp>();
        queryResult.setPageNumber(1);
        queryResult.setPageSize(-1);;
        
        //此取得資料時,已經按照初始設定取值
        queryResult = payerTempService.getPayerTempNoConfirm(getQueryResult());        
        
        return new ForwardResolution(DEFAULT_JSP);
    }

    /**
     * 放行、刪除
     * @return
     */
    public Resolution doAjaxPayersConfirm()
    {
        logger.debug("Enter doAjaxPayersConfirm mehtod.");
        try {
            if (null == checkPayerTemp)
                checkPayerTemp = new ArrayList<PayerTemp>();

            payerTempService.updatePayerStatus(checkPayerTemp, resultPayerTemp.getPayerStatus());
            logger.debug("resultPayerTemp.getRecordStatus(){}",resultPayerTemp.getRecordStatus());
            if ("Y".equals(resultPayerTemp.getPayerStatus())){
                
                
                if ("D".equals(resultPayerTemp.getRecordStatus())){
                        confirmMessage = "繳款人資料刪除放行完成!";
                }else if ("U".equals(resultPayerTemp.getRecordStatus())){
                        confirmMessage = "繳款人資料異動放行完成!"; 
                }else if("A".equals(resultPayerTemp.getRecordStatus())){
                        confirmMessage = "繳款人資料新增放行完成!";
                 }
                else {
                    confirmMessage = "繳款人資料異動放行完成!";
                }
            } else{
                confirmMessage = "繳款人異動資料退回！";
                  }
        } catch (Exception e) {
            confirmMessage = "處理失敗！";
            logger.error("", e);
        }
        return new ForwardResolution(AFTER_CONFIRM_JSP);
    }
    
    /**
     * 查詢繳款人資料
     * 
     * @return
     */
    public Resolution doAjaxQueryPayer() {
        logger.debug("Enter doAjaxQueryPayer mehtod.");
        try {
            // 呼叫服務查詢
            resultPayerTemp = payerTempService.getPayerTempByPk(payerTempPk);
        }
        catch (Exception e) {
            logger.error("繳款人資料維護作業-繳款人查詢錯誤(doAjaxQueryPayer):", e);

            // 轉換錯誤訊息
            ValidationErrors errors = new ValidationErrors();
            errors.addGlobalError(new LocalizableError("doAjaxQueryPayer.exception"));
            getContext().setValidationErrors(errors);
            // 回傳 錯誤 HTML fragments
            return super.errorsToHtmlStreams(errors);
        }

        return new ForwardResolution(AJAX_QUERY_PAYER_JSP);
    }

    /**
     * @return 傳回 queryResult。
     */
    public PaginatedList<PayerTemp> getQueryResult() {
        if (null == queryResult) queryResult = new PaginatedList<PayerTemp>();
        return queryResult;
    }

    /**
     * @param queryResult 要設定的 queryResult。
     */
    public void setQueryResult(PaginatedList<PayerTemp> queryResult) {
        this.queryResult = queryResult;
    }

    /**
     * @return 傳回 resultPayer。
     */
    public Payer getResultPayer() {
        return resultPayer;
    }

    /**
     * @param resultPayer 要設定的 resultPayer。
     */
    public void setResultPayer(Payer resultPayer) {
        this.resultPayer = resultPayer;
    }

    /**
     * @return 傳回 resultPayerTemp。
     */
    public PayerTemp getResultPayerTemp() {
        return resultPayerTemp;
    }

    /**
     * @param resultPayerTemp 要設定的 resultPayerTemp。
     */
    public void setResultPayerTemp(PayerTemp resultPayerTemp) {
        this.resultPayerTemp = resultPayerTemp;
    }

    /**
     * @return 傳回 payerTempPk。
     */
    public Long getPayerTempPk() {
        return payerTempPk;
    }

    /**
     * @param payerTempPk 要設定的 payerTempPk。
     */
    public void setPayerTempPk(Long payerTempPk) {
        this.payerTempPk = payerTempPk;
    }


    
    /**
     * @return the checkPayerTemp
     */
    public ArrayList<PayerTemp> getCheckPayerTemp() {
        return checkPayerTemp;
    }

    
    /**
     * @param checkPayerTemp the checkPayerTemp to set
     */
    public void setCheckPayerTemp(ArrayList<PayerTemp> checkPayerTemp) {
        this.checkPayerTemp = checkPayerTemp;
    }

    
    /**
     * @return the confirmMessage
     */
    public String getConfirmMessage() {
        return confirmMessage;
    }

    
    /**
     * @param confirmMessage the confirmMessage to set
     */
    public void setConfirmMessage(String confirmMessage) {
        this.confirmMessage = confirmMessage;
    }
}
